This program examines tracts that only partially intersect with community districts.

Load relevant files

library(sf)
## Linking to GEOS 3.9.1, GDAL 3.2.1, PROJ 7.2.1; sf_use_s2() is TRUE
library(tidyverse)
## -- Attaching packages --------------------------------------- tidyverse 1.3.1 --
## v ggplot2 3.3.5     v purrr   0.3.4
## v tibble  3.1.6     v dplyr   1.0.8
## v tidyr   1.2.0     v stringr 1.4.0
## v readr   2.1.2     v forcats 0.5.1
## -- Conflicts ------------------------------------------ tidyverse_conflicts() --
## x dplyr::filter() masks stats::filter()
## x dplyr::lag()    masks stats::lag()
library(magrittr)
## 
## Attaching package: 'magrittr'
## The following object is masked from 'package:purrr':
## 
##     set_names
## The following object is masked from 'package:tidyr':
## 
##     extract
path_name <- "../data/"
load(paste0(path_name, "bl", ".RData"))
glimpse(bl)
## Rows: 39,903
## Columns: 4
## $ bl_id    <chr> "200910518012010", "200910514003006", "200910515002005", "200~
## $ bl_name  <chr> "Block 2010", "Block 3006", "Block 2005", "Block 1009", "Bloc~
## $ bl_area  <dbl> 38500.823, 51711.677, 104537.047, 73933.762, 95854.528, 19934~
## $ geometry <POLYGON [°]> POLYGON ((-94.64213 38.9774..., POLYGON ((-94.63966 3~
load(paste0(path_name, "cd", ".RData"))
glimpse(cd)
## Rows: 59
## Columns: 4
## $ cd_id    <dbl> 106, 108, 113, 102, 129, 116, 114, 101, 105, 103, 107, 109, 1~
## $ cd_name  <chr> "East Side", "Old Northeast", "Greater Downtown", "Blue Valle~
## $ cd_area  <dbl> 281713850, 118237219, 181920811, 216842678, 412671242, 264282~
## $ geometry <POLYGON [°]> POLYGON ((-94.52337 39.0941..., POLYGON ((-94.50777 3~
load(paste0(path_name, "icd", ".RData"))
glimpse(icd)
## Rows: 15,748
## Columns: 19
## $ bl_id         <chr> "290950023002014", "290950063002017", "290950022003001",~
## $ bl_name       <chr> "Block 2014", "Block 2017", "Block 3001", "Block 3004", ~
## $ bl_area       <dbl> 14983.197, 9597.627, 18151.722, 18380.541, 17691.230, 17~
## $ st_id         <chr> "29", "29", "29", "29", "29", "29", "29", "29", "29", "2~
## $ co_id         <chr> "29095", "29095", "29095", "29095", "29095", "29095", "2~
## $ tr_id         <chr> "29095002300", "29095006300", "29095002200", "2909500220~
## $ bg_id         <chr> "290950023002", "290950063002", "290950022003", "2909500~
## $ people        <chr> "62", "0", "22", "26", "42", "49", "43", "0", "12", "20"~
## $ housing_units <chr> "18", "0", "9", "18", "22", "22", "14", "0", "1", "10", ~
## $ land_area     <chr> "14996", "9606", "18167", "18396", "17706", "17473", "32~
## $ water_area    <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "~
## $ block_lat     <chr> "+39.0894021", "+39.0439974", "+39.0932160", "+39.093298~
## $ block_lon     <chr> "-094.5318307", "-094.5610343", "-094.5240738", "-094.52~
## $ cd_id         <dbl> 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 106, 1~
## $ cd_name       <chr> "East Side", "East Side", "East Side", "East Side", "Eas~
## $ cd_area       <dbl> 281713850, 281713850, 281713850, 281713850, 281713850, 2~
## $ geometry      <GEOMETRY [°]> POLYGON ((-94.5324 39.0887,..., POLYGON ((-94.5~
## $ in_area       <dbl> 14983.19694, 9597.62653, 18151.72239, 18380.54058, 17691~
## $ pct_in        <dbl> 100.0000000, 100.0000000, 100.0000000, 100.0000000, 100.~
load(paste0(path_name, "red", ".RData"))
glimpse(red)
## Rows: 39,903
## Columns: 11
## $ st_id         <chr> "20", "20", "20", "20", "20", "20", "20", "20", "20", "2~
## $ co_id         <chr> "20091", "20091", "20091", "20091", "20091", "20091", "2~
## $ tr_id         <chr> "20091050000", "20091050000", "20091050000", "2009105000~
## $ bg_id         <chr> "200910500001", "200910500001", "200910500001", "2009105~
## $ bl_id         <chr> "200910500001000", "200910500001001", "200910500001002",~
## $ people        <chr> "52", "47", "51", "58", "138", "68", "35", "81", "39", "~
## $ housing_units <chr> "33", "29", "27", "26", "70", "34", "18", "28", "12", "1~
## $ land_area     <chr> "27826", "26904", "26385", "27075", "74489", "58378", "2~
## $ water_area    <chr> "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "0", "~
## $ block_lat     <chr> "+39.0427053", "+39.0427081", "+39.0426993", "+39.042717~
## $ block_lon     <chr> "-094.6217603", "-094.6228101", "-094.6238297", "-094.62~
load(paste0(path_name, "bg", ".RData"))
glimpse(bg)
## Rows: 1,684
## Columns: 4
## $ bg_id    <chr> "201039819003", "201030714004", "201030711041", "201030712051~
## $ bg_name  <chr> "Block Group 3", "Block Group 4", "Block Group 1", "Block Gro~
## $ bg_area  <dbl> 984975.5, 36602869.0, 18313082.5, 26007918.3, 11448660.8, 243~
## $ geometry <POLYGON [°]> POLYGON ((-94.94756 39.3373..., POLYGON ((-95.18756 3~
load(paste0(path_name, "co", ".RData"))
clist <- c(
  "20091",
  "20103",
  "20209",
  "29037",
  "29047",
  "29095",
  "29165")
co                                     %>%
  filter(GEOID %in% clist)              -> co
glimpse(co)
## Rows: 7
## Columns: 19
## $ STATEFP  <chr> "29", "29", "20", "20", "29", "29", "20"
## $ COUNTYFP <chr> "037", "165", "091", "209", "095", "047", "103"
## $ COUNTYNS <chr> "00758473", "00758537", "00485010", "00485065", "00758502", "~
## $ GEOID    <chr> "29037", "29165", "20091", "20209", "29095", "29047", "20103"
## $ NAME     <chr> "Cass", "Platte", "Johnson", "Wyandotte", "Jackson", "Clay", ~
## $ NAMELSAD <chr> "Cass County", "Platte County", "Johnson County", "Wyandotte ~
## $ LSAD     <chr> "06", "06", "06", "06", "06", "06", "06"
## $ CLASSFP  <chr> "H1", "H1", "H1", "H6", "H1", "H1", "H1"
## $ MTFCC    <chr> "G4020", "G4020", "G4020", "G4020", "G4020", "G4020", "G4020"
## $ CSAFP    <chr> "312", "312", "312", "312", "312", "312", "312"
## $ CBSAFP   <chr> "28140", "28140", "28140", "28140", "28140", "28140", "28140"
## $ METDIVFP <chr> NA, NA, NA, NA, NA, NA, NA
## $ FUNCSTAT <chr> "A", "A", "A", "C", "A", "A", "A"
## $ ALAND    <dbl> 1804223313, 1087283058, 1226679688, 392739381, 1565698757, 10~
## $ AWATER   <dbl> 14963188, 16949451, 16319024, 11801597, 30621016, 28508804, 1~
## $ INTPTLAT <chr> "+38.6464737", "+39.3786900", "+38.8839065", "+39.1153842", "~
## $ INTPTLON <chr> "-094.3545467", "-094.7614765", "-094.8223295", "-094.7630866~
## $ geometry <MULTIPOLYGON [°]> MULTIPOLYGON (((-94.11966 3..., MULTIPOLYGON (((-94.65596 3..~
## $ label    <chr> "Cass", "Platte", "Johnson", "Wyandotte", "Jackson", "Clay", ~

Find community ids

icd                                    %>%
  tibble                               %>%
  distinct(cd_id)                      %>%
  arrange(cd_id)                       %>%
  pull(cd_id)                           -> cd_list
county_plot <- function(co, cd, i) {
  cd %<>% filter(cd_id==i)
  ggplot(co, aes())                     +
    geom_sf(
      fill=NA,
      color="darkgreen")                +
    ggtitle(cd$cd_name)                 +
    geom_sf(
      data=cd,
      aes(),
      fill="white",
      color="darkred")                  -> plot_co
  plot(plot_co)
}

extract_bg <- function(icd, i) {
  icd                                  %>%
    tibble                             %>%
    filter(cd_id==i)                   %>%
    filter(pct_in > 2)                 %>%
    distinct(bg_id)                    %>%
    arrange(bg_id)                     %>%
    pull(bg_id)                       
}

extract_bl <- function(icd, i, j) {
  icd                                  %>%
    tibble                             %>%
    filter(cd_id==i)                   %>%
    filter(bg_id==j)                   %>%
    filter(pct_in > 2)                 %>%
    distinct(bl_id)                    %>%
    arrange(bl_id)                     %>%
    pull(bl_id)                       
}


bg_plot <- function(cd, i, bg, j, icd, bl_list) {
  cd_filter <- cd$cd_id==i
  bg_filter <- bg$bg_id==j
  bl_filter <- icd$bg_id==j & icd$bl_id %in% bl_list
  s1 <- filter(cd, cd_filter)
  s2 <- filter(bg, bg_filter)
  s3 <- filter(icd, bl_filter)
  ggplot(s1, aes())                     +
    geom_sf(
      fill="white",
      color="darkred",
      size=2)                           +
    geom_sf(
      data=s2,
      aes(),
      fill="lightgreen",
      color="darkgreen")                +
    ggtitle(j)                          +
    geom_sf(
      data=s3,
      aes(),
      fill="pink",
      color="darkred")                  -> plot_bg
  plot(plot_bg)
}
for (i in cd_list[1:5]) {
  county_plot(co, cd, i)
  bg_list <- extract_bg(icd, i)
  for (j in bg_list) {
    bl_list <- extract_bl(icd, i, j)
    bg_plot(cd, i, bg, j, icd, bl_list)
  }
}